2006年10月10日
川俣晶の縁側ソフトウェア技術雑記 total 4650 count

System.Net.Sockets.TcpClient.Client プロパティの.NET Framework 1.1~2.0間の非互換性「制限解除」

Written By: 川俣 晶連絡先

 ほとんど個人的なメモです。

 .NET FrameworkのSystem.Net.Sockets.TcpClient.Client プロパティは、1.1と2.0の間で使い方に関する決定的な非互換性を持ちます。(上位互換性はある)

宣言の違い(C#構文) §

1.1の場合

protected Socket Client {get; set;}

2.0の場合

public Socket Client { get; set; }

 つまり、protectedがpublicになって制限が解除されたわけです。

使い方の相違 §

 1.1の場合、Clientプロパティに触れるということは、常にSystem.Net.Sockets.TcpClientクラスの継承を必須要求していたことになります。

 しかし、2.0では継承は必須ではありません。

 ソースコードは大幅に簡潔になります。

感想 §

 これはずっと昔、えらい苦労させられた問題に関係する話題です。

 なので、印象が強く、すぐに思い出せました。

 「ったくもう、この機能をprotectedにするとは何を考えてるのだろう……」と思っていたら、制限解除されたようですね。

 変更点のリストを詳しく見ている訳ではないので(見てもどうせ気付かないだろうし)、まだまだたまに発見があります。

 余談ですが、これでお役御免となった昔のコードです。

public class MyTcpClient : System.Net.Sockets.TcpClient

{

    public MyTcpClient( System.Net.Sockets.Socket socket )

    {

        base.Client = socket;

    }

    public EndPoint RemoteEndPoint

    {

        get

        {

            System.Net.Sockets.Socket socket = Client;

            return socket.RemoteEndPoint;

        }

    }

}